Diagrama de Estados (Elementos y Relaciones)

Los diagramas de estados permiten modelar el comportamiento dinámico de un sistema, objeto, clase o colaboración, representando los diferentes estados que puede adoptar y las transiciones entre ellos. Son especialmente útiles para describir ciclos de vida, respuestas a eventos y situaciones donde el comportamiento depende del historial o contexto interno del sistema (Booch et al., 2006; OMG, 2017).


Estado

Un estado representa una situación o condición en la que puede encontrarse un objeto durante su existencia. Puede caracterizarse como un conjunto de valores cualitativamente similares, un periodo de espera a eventos, o un periodo de ejecución de actividades. Los estados pueden ser simples o compuestos, y pueden definir actividades de entrada (entry) y salida (exit) (Booch et al., 2006; OMG, 2017; Rumbaugh et al., 2007).

Tipos de Estado

Inicial

Indica el inicio y final de la transición de estados.

Figura
_Estado Inicial y Final

uml diagram

Ver Ejemplo

Simple

Su característica principal es que no posee subestados.

Figura
Estado Simple y Transición

uml diagram

Ver Ejemplo

Compuesto

Es un estado que está compuesto por varios subestados.

Figura
Estado Compuesto y Subestados

uml diagram

Ver Ejemplo


Transición

Una transición es el vínculo que conecta dos estados y representa el cambio de un estado a otro como respuesta a un evento. Puede estar condicionada por una guarda (expresión booleana) y asociada a un efecto o acción. Las transiciones pueden ser externas (cambian el estado activo) o internas (no cambian el estado activo, pero ejecutan un efecto) (Booch et al., 2006; OMG, 2017; Rumbaugh et al., 2007).

Estructura Explicación
Evento Son las condiciones que desencadenan la transición entre dos estados. Puede ser:
- Interno (sin cambio de estado, ejecuta una acción).
- Externo (cambio de estado).
Guarda Condiciones que deben satisfacerse antes de que se pueda realizar una transición.
Evalúa una expresión lógica y determina si se cumple la condición para realizar la transición
Acción Son tareas que se realizan automáticamente o manualmente después de que se haya realizado una transición
Efecto Son las acciones que se realizan después de que se haya realizado la transición, y pueden incluir la actualización de variables, cambios en el estado del sistema, entre otros

Evento

Un evento es una ocurrencia significativa que puede disparar una transición. Se clasifican en eventos de señal (comunicación asincrónica), llamada (invocación de operación), cambio (modificación de una condición) y tiempo (paso de tiempo). Los eventos pueden tener parámetros y su ocurrencia puede tener consecuencias en el modelo (Booch et al., 2006; OMG, 2017; Rumbaugh et al., 2007).


Acción

Una acción es una operación atómica y no interrumpible que se ejecuta como efecto de una transición o como actividad de entrada/salida de un estado. Ejemplos incluyen la actualización de atributos, el envío de señales o la invocación de operaciones (Booch et al., 2006; OMG, 2017; Rumbaugh et al., 2007).


Jerarquía de Estados

Los estados pueden organizarse jerárquicamente mediante estados compuestos y subestados. Esto permite modelar comportamientos complejos, reutilizar transiciones y definir excepciones o condiciones de error de manera más eficiente (Booch et al., 2006; OMG, 2017; Rumbaugh et al., 2007).


Región Concurrente

Una región concurrente es una subdivisión de un estado compuesto donde pueden coexistir varios subestados activos en paralelo. Permiten modelar situaciones en las que un objeto puede estar simultáneamente en varios estados independientes, facilitando la representación de concurrencia dentro del sistema (Booch et al., 2006; OMG, 2017; Rumbaugh et al., 2007).

Figura
Estados Concurrentes
Zk Diagrama de Estados (Elementos).png

@startuml
!pragma layout smetana
skinparam style strictuml
skinparam BackgroundColor LightGray
skinparam conditionStyle InsideDiamond
scale 0.8

[*] --> EstadoCompuesto
state EstadoCompuesto {
	[*] --> Estado1
	Estado1 --> Estado2 : e12()
	Estado2 --> Estado1 : e21()
	||
	[*] --> Estado3
	Estado3 --> Estado4 : e34()
	Estado4 --> Estado3 : e43()
}
@enduml

Referencias